package com.capybara.account.result;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.http.HttpStatus;

import java.util.List;

/**
 * 返回
 *
 * @author wangguochao
 */
public class ResultSet {

    /**
     * 返回除去翻页以外的类型
     */
    public static <T> Result<T> go(T d) {
        return Result.<T>builder().data(d).message("success").status(HttpStatus.OK.value()).build();
    }

    /**
     * 成功操作
     */
    public static Result<?> success() {
        return Result.builder().message("操作成功").status(HttpStatus.OK.value()).build();
    }

    /**
     * 成功时返回提示信息操作
     */
    public static Result<?> successMessage(String d) {
        return Result.builder().message(d).status(HttpStatus.OK.value()).build();
    }

    /**
     * 操作失败返回
     */
    public static Result<?> error() {
        return Result.builder().message("操作失败").status(HttpStatus.CONFLICT.value()).build();
    }

    /**
     * 操作失败返回
     */
    public static Result<?> error(String message) {
        return Result.builder().message(message).status(HttpStatus.MOVED_PERMANENTLY.value()).build();
    }

    /**
     * 操作失败返回
     */
    public static Result<?> error401(String message) {
        return Result.builder().message(message).status(HttpStatus.UNAUTHORIZED.value()).build();
    }

    /**
     * 保存操作返回
     */
    public static Result<?> operation(boolean b) {
        return b ? ResultSet.success() : ResultSet.error();
    }

    /**
     * 保存操作返回
     */
    public static Result<?> operation(int i) {
        return i > 0 ? ResultSet.success() : ResultSet.error();
    }

    /**
     * 翻页信息返回
     *
     * @param b 分页
     */
    public static <T> ResultPage<T> page(IPage<T> b) {
        return ResultPage.<T>builder()
                .status(HttpStatus.OK.value())
                .message(HttpStatus.OK.toString())
                .data(b.getRecords())
                .total(b.getTotal())
                .current(b.getCurrent())
                .size(b.getSize())
                .build();
    }

    /**
     * 自定义分页
     *
     * @param d     数据集
     * @param total 总数
     * @param <T>   范性
     * @return 响应
     */
    public static <T> ResultPage<T> page(List<T> d, long total) {
        return ResultPage.<T>builder().status(HttpStatus.OK.value()).message(HttpStatus.OK.toString()).data(d).total(total).build();
    }
}
